// Type: Castle.Windsor.IWindsorContainer
// Assembly: Castle.Windsor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc
// Assembly location: D:\OutSource\NewSource\agatha-1.0.1-src\libs\castle\Castle.Windsor.dll

using Castle.Core;
using Castle.MicroKernel;
using Castle.MicroKernel.Registration;
using System;
using System.Collections;

namespace Castle.Windsor
{
    public interface IWindsorContainer : IServiceProviderEx, IServiceProvider, IDisposable
    {
        string Name { get; }
        object this[string key] { get; }
        object this[Type service] { get; }
        IKernel Kernel { get; }
        IWindsorContainer Parent { get; set; }
        IWindsorContainer AddFacility(string key, IFacility facility);
        IWindsorContainer AddFacility<T>(string key) where T : new(), IFacility;
        IWindsorContainer AddFacility<T>(string key, Action<T> onCreate) where T : new(), IFacility;
        IWindsorContainer AddFacility<T>(string key, Func<T, object> onCreate) where T : new(), IFacility;
        IWindsorContainer AddFacility<T>() where T : new(), IFacility;
        IWindsorContainer AddFacility<T>(Action<T> onCreate) where T : new(), IFacility;
        IWindsorContainer AddFacility<T>(Func<T, object> onCreate) where T : new(), IFacility;
        IWindsorContainer AddComponent(string key, Type classType);
        IWindsorContainer AddComponent(string key, Type serviceType, Type classType);
        IWindsorContainer AddComponentLifeStyle(string key, Type classType, LifestyleType lifestyle);
        IWindsorContainer AddComponentLifeStyle(string key, Type serviceType, Type classType, LifestyleType lifestyle);
        IWindsorContainer AddComponentWithProperties(string key, Type classType, IDictionary extendedProperties);

        IWindsorContainer AddComponentWithProperties(string key, Type serviceType, Type classType,
                                                     IDictionary extendedProperties);

        IWindsorContainer AddComponent<T>();
        IWindsorContainer AddComponent<T>(string key);
        IWindsorContainer AddComponentLifeStyle<T>(LifestyleType lifestyle);
        IWindsorContainer AddComponentLifeStyle<T>(string key, LifestyleType lifestyle);
        IWindsorContainer AddComponent<I, T>() where T : class;
        IWindsorContainer AddComponent<I, T>(string key) where T : class;
        IWindsorContainer AddComponentLifeStyle<I, T>(LifestyleType lifestyle) where T : class;
        IWindsorContainer AddComponentLifeStyle<I, T>(string key, LifestyleType lifestyle) where T : class;
        IWindsorContainer AddComponentWithProperties<T>(IDictionary extendedProperties);
        IWindsorContainer AddComponentWithProperties<T>(string key, IDictionary extendedProperties);
        IWindsorContainer AddComponentProperties<I, T>(IDictionary extendedProperties) where T : class;
        IWindsorContainer AddComponentProperties<I, T>(string key, IDictionary extendedProperties) where T : class;
        IWindsorContainer Register(params IRegistration[] registrations);
        IWindsorContainer Install(params IWindsorInstaller[] installers);
        object Resolve(string key);
        object Resolve(string key, IDictionary arguments);
        object Resolve(string key, object argumentsAsAnonymousType);
        object Resolve(string key, Type service);
        object Resolve(Type service);
        object Resolve(Type service, IDictionary arguments);
        object Resolve(Type service, object argumentsAsAnonymousType);
        void Release(object instance);
        void AddChildContainer(IWindsorContainer childContainer);
        void RemoveChildContainer(IWindsorContainer childContainer);
        IWindsorContainer GetChildContainer(string name);
        T Resolve<T>();
        T Resolve<T>(IDictionary arguments);
        T Resolve<T>(object argumentsAsAnonymousType);
        T Resolve<T>(string key);
        T Resolve<T>(string key, IDictionary arguments);
        T Resolve<T>(string key, object argumentsAsAnonymousType);
        object Resolve(string key, Type service, IDictionary arguments);
        object Resolve(string key, Type service, object argumentsAsAnonymousType);
        T[] ResolveAll<T>();
        Array ResolveAll(Type service);
        Array ResolveAll(Type service, IDictionary arguments);
        Array ResolveAll(Type service, object argumentsAsAnonymousType);
        T[] ResolveAll<T>(IDictionary arguments);
        T[] ResolveAll<T>(object argumentsAsAnonymousType);
    }
}
